// Author: Domien Nowicki

#ifndef MAPSOLVER_H
#define MAPSOLVER_H

#include "Map.h"
#include "Move.h"
#include "Properties.h"

class MapSolver
{
public:

	// Constructors
	MapSolver(const Map& map, const Properties& properties);

	// Destructor
	virtual ~MapSolver();

	// Gets the next move to try
	virtual Move NextMove() = 0;
	// Possible initialization the generic map solver algorithm needs
	virtual void Initialize() = 0;
	// Get a next hint
	virtual Move HintMove() = 0;

	// Get the properties for this map solver
	const Properties& GetProperties() const;

	// Set the map for this map solver
	void SetMap(const Map& map);


protected:
	Map map;
	Properties properties;
};

#endif //MAPSOLVER_H